package qdu.rgzb23.notification;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;

import java.util.Random;


public class Testnotif extends Activity{
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.ly_testnotif);
		findViewById(R.id.btn_sendnotif).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				do_notif();
			}
		});
	}

	public void do_notif(){
		//app A(coding)   Sysapp(notifmgr)-> app A
		//弹出通知,通知的处理（显示，排列，事件）都非通知的源app管理
		//1.通知管理对象 notificationmgr属于service的一种
		NotificationManager notifmgr = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
		notifmgr.createNotificationChannel(new NotificationChannel("1","mychannel", NotificationManager.IMPORTANCE_DEFAULT));

//-------------准备pendingintent------------------------------
		//intent 从当前设置intent的位置作为起跳点
		//代理intent  PendingIntent       起跳点的位置不是当前设置intent的位置
		//Intent it = new Intent(this, Targetact.class);
		Intent it = new Intent();
		//it.setFlags();
		it.setClassName("qdu.rgzb23.notification","qdu.rgzb23.notification.Targetact");
		//通知中的代理跳转，即intent必须为显示匹配
		Random rd = new Random();
		it.putExtra("msg",rd.nextInt(5));
		PendingIntent pi = PendingIntent.getActivity(this, 0, it, PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
		//getActivity可以自组装PendingIntent对象
		//参数1：当前设置pendingintent对象的组件
		//参数2：相当于一个id
		//参数3：pendingintent并不替代intent对象，而是在一个intent对象的基础上进行包装，参数3就是原始的intent对象
		//参数4:由于代理intent对象不在当前app处理,其对象的状态需要提前预判
		//(例如:该代理intent对象是否已近存在,若存在如何处理当前正在创建的对象以及已经存在的对象)
		// FLAG_NO_CREATE返回null若该对象不存在,而不创建新的代理intent对象
		//若代理intent对象已经存在，FLAG_CANCEL_CURRENT先销毁旧对象并用新的替代，
		//FLAG_UPDATE_CURRENT不销毁原有对象只更新其中的类似数据等内容
//-----------------------------------------------------------
		//============================================================
		//准备通知中的按钮
		Intent it_go1 = new Intent();
		it_go1.setAction("color_cast");
		//it_go1.setClassName("qdu.rgzb23.notification","qdu.rgzb23.notification.Targetact");
		//it_go1.putExtra("msg",rd.nextInt(5));
		it_go1.putExtra("make_color", Color.RED);
		it_go1.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
		PendingIntent pi_go1 = PendingIntent.getBroadcast(this,1, it_go1,PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);

		Intent it_go2 = new Intent();
		it_go2.setAction("color_cast");
		//it_go2.setClassName("qdu.rgzb23.notification","qdu.rgzb23.notification.Targetact");
		//it_go2.putExtra("msg",rd.nextInt(5));
		it_go2.putExtra("make_color", Color.GREEN);
		it_go2.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
		PendingIntent pi_go2 = PendingIntent.getBroadcast(this,2, it_go2,PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
		//============================================================
		//2.设置通知的各种属性  notification builder对象中设置,并返回一个notification对象
		Notification mynotif = new Notification.Builder(this,"1")
				//设置属性时有三个必须设置的属性setContentTitle,setContentText,setSmallIcon
				.setContentTitle("mycontitle")
				.setSmallIcon(R.mipmap.ic_launcher)
				.setContentText("mycontext")
//				.setLargeIcon(
//
//				)
				//.setTicker("tickertext")
				.setContentIntent(pi)
				.setAutoCancel(false)
				//.setTimeoutAfter(2000)
				//.addAction(Action)action对象由icon，text，pendingintent三样组成
				//每个addaction函数值对应一个按钮选项
				//这里的pendingintent一般结合broadcast使用
				.addAction(R.drawable.ic_launcher_background,"try_red", pi_go1)
				.addAction(R.drawable.ic_launcher_background, "try_GREEN", pi_go2)
				.build();
		//3.将设置好的notification对象送给通知管理对象并运行
		//调用notify函数，参数一id标记  参数二即第2步准备好的通知对象
		notifmgr.notify(1, mynotif);
	}
}
